一、<properties>
标签引入外部配置文件 MyBatis可以使用properties来引入外部properties配置文件的内容,其具有两个属性:
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration >
- MyBatis可以使用<properties>标签来引入外部properties配置文件的内容
- resource:引入类路径下的资源
- url:引入网络路径或磁盘路径下的资源
-->
<properties resource ="dbconfig.properties" > </properties >
<environments default ="development" >
<environment id ="development" >
<transactionManager type ="JDBC" />
<dataSource type ="POOLED" >
<property name ="driver" value ="${jdbc.driver}" />
<property name ="url" value ="${jdbc.url}" />
<property name ="username" value ="${jdbc.root}" />
<property name ="password" value ="${jdbc.password}" />
</dataSource >
</environment >
</environments >
<mappers >
<mapper resource ="EmployeeMapper.xml" />
</mappers >
</configuration >
二、<settings>
标签运行时行为设置 其有很多设置项可以决定运行时的行为,我们看下其中的一个设置项mapUnderscoreToCamelCase
,表示是否开启自动驼峰命名规则映射:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration >
- url:引入网络路径或磁盘路径下的资源 -->
<properties resource ="dbconfig.properties" > </properties >
settings包含很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings >
<setting name ="mapUnderscoreToCamelCase" value ="true" />
</settings >
<environments default ="development" >
<environment id ="development" >
<transactionManager type ="JDBC" />
<dataSource type ="POOLED" >
<property name ="driver" value ="${jdbc.driver}" />
<property name ="url" value ="${jdbc.url}" />
<property name ="username" value ="${jdbc.username}" />
<property name ="password" value ="${jdbc.password}" />
</dataSource >
</environment >
</environments >
<mappers >
<mapper resource ="EmployeeMapper.xml" />
</mappers >
</configuration >
三、<typeAlias>
标签 1
2
3
4
5
<typeAliases >
<typeAlias type ="com.glemontree.mybatis.bean.Employee" />
</typeAliases >
可以使用<typeAliases>
标签为Java类型起别名,其子标签<typeAlias>
用来为某个Java类型起别名,type指定要其别名的类型的全类名,默认别名就是类名小写,alias属性可以指定新的别名。
为了对某个包下的所有类起别名,可以使用批量起别名:
1
2
3
4
5
6
7
8
<typeAliases >
<package name ="com.glemontree.mybatis.bean" />
</typeAliases >
还有一种方式可以为类名起别名,就是使用@Alias
注解的方式,在批量起别名的情况下,可以使用@Alias
注解为某个类型指定新的别名,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.glemontree.mybatis.bean;
import org.apache.ibatis.type.Alias;
@Alias ("emp" )
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
public Integer getId () {
return id;
}
public void setId (Integer id) {
this .id = id;
}
public String getLastName () {
return lastName;
}
public void setLastName (String lastName) {
this .lastName = lastName;
}
public String getEmail () {
return email;
}
public void setEmail (String email) {
this .email = email;
}
public String getGender () {
return gender;
}
public void setGender (String gender) {
this .gender = gender;
}
@Override
public String toString () {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender + "]" ;
}
}
四、<environments>
标签 MyBatis可以配置多种环境,其下面可以包含<environment>
标签,,用来配置一个具体的环境信息。
<environment>
标签必须配置<transactionManager>
和<dataSource>
两个子标签:
<transactionManager>
表示事务管理器,其具有一个属性type,表示事务管理器的类型,共有两种取值,为JDBC (JdbcTransactionFactory)| MANAGED(ManagedTransactionFactory),当然也可以自定义事务管理器,通过实现TransactionFactory来实现自定义事务管理器,此时type属性就是全类名。
<dataSource>
表示数据源,其具有一个属性type,表示数据源的类型,内置的有三种取值,为UNPOOLED (不使用连接池,UnpooledDataSourceFactory)| POOLED (使用连接池,PooledDataSourceFactory)| JNDI(使用JNDI技术,PooledDataSourceFactory),当然也可以自定义数据源,通过实现DataSource接口即可实现自定义数据源,此时type属性就是全类名。
<environment>
标签的id属性代表当前环境的唯一标识,通过<environments>
标签的default属性指定某种使用环境,从而可以达到快速切换环境的目的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<environments default ="development" >
<environment id ="test" >
<transactionManager type ="" > </transactionManager >
<dataSource type ="" >
<property name ="driver" value ="${jdbc.driver}" />
<property name ="url" value ="${jdbc.url}" />
<property name ="username" value ="${jdbc.username}" />
<property name ="password" value ="${jdbc.password}" />
</dataSource >
</environment >
<environment id ="development" >
<transactionManager type ="JDBC" />
<dataSource type ="POOLED" >
<property name ="driver" value ="${jdbc.driver}" />
<property name ="url" value ="${jdbc.url}" />
<property name ="username" value ="${jdbc.username}" />
<property name ="password" value ="${jdbc.password}" />
</dataSource >
</environment >
</environments >
五、<databaseIdProvider>
标签 MyBatis可以根据数据库厂商执行不同的数据库语句,首先需要在全局配置文件中进行下面的配置:
1
2
3
4
5
6
7
8
9
10
11
12
databaseIdProvider:支持多数据库厂商
type="DB_VENDOR":VendorDatabaseIdProvider
作用是得到数据库厂商的标识,MyBatis就能根据数据库厂商标识来执行不同的SQL
MySQL,Oracle,SQL Server...
-->
<databaseIdProvider type ="DB_VENDOR" >
<property name ="MySQL" value ="mysql" />
<property name ="Oracle" value ="oracle" />
<property name ="SQL Server" value ="sqlserver" />
</databaseIdProvider >
然后在SQL映射文件中这样配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<mapper namespace ="com.glemontree.mybatis.dao.EmployeeMapper" >
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);
-->
<select id ="getEmpById" resultType ="emp" databaseId ="mysql" >
select * from tbl_employee where id = #{id}
</select >
<select id ="getEmpById" resultType ="emp" databaseId ="oracle" >
select EMPLOYEE_ID id, LAST_NAME lastName, EMAIL email from employees where EMPLOYEE_ID = #{id}
</select >
</mapper >
<select>
标签具有一个databaseId
属性,用来指定在哪个数据库下执行这个语句,这里我们分别配置了mysql和oracle,当当前数据库环境为mysql时就会执行上面的SQL语句,当当前数据库环境为oracle时就会执行下面的SQL语句。
Oracle在where语句中是不能使用字段别名的,所以这里的where语句不能写成where id = #{id}
,而只能用字段名。
六、<mappers>
标签 将写好的映射文件注册到全局配置文件中,<mappers>
标签下的<mapper>
子标签就是用来注册SQL映射文件的,其具有以下几个属性:
resource:引用类路径下的SQL映射文件
url:引用网络或磁盘路径下的SQL映射文件
class:引用(注册)接口
有SQL映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下
没有SQL映射文件,所有的SQL都是利用注解写在接口上
1
2
3
4
public interface EmployeeMapperAnnotation {
@Select ("select * from tbl_employee where id = #{id}" )
public Employee getEmpById (Integer id) ;
}
不要忘记在全局配置文件中进行注册:
1
2
3
<mappers >
<mapper class ="com.glemontree.mybatis.dao.EmployeeMapperAnnotation" />
</mappers >
推荐:比较重要的和复杂的Dao接口写sql映射文件,不重要的和简单的Dao接口为了开发快速可以使用注解。
<mappers>
标签下还有一个<package>
标签,其可以实现批量注册,但需要注意的是如果是使用SQL映射文件,映射文件名必须与接口同名,并且与接口放在同一目录下。
七、注意点 全局配置文件中这些标签的配置是有顺序的,如果顺序不对也会报错,比如我在实验过程中就发现如果将<databaseIdProvider>
标签放在<environments>
标签的前面就会报错。